package br.ufrn.cep.eEtica.integracao.model;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@Entity 
public class StatusProjeto {
	
	@Id @GeneratedValue 
	private int id;
	
	@ManyToOne(cascade={CascadeType.MERGE,CascadeType.PERSIST, CascadeType.REFRESH})
	@JoinColumn(name="projeto_fk")
	private Projeto projeto;
	
	@Enumerated(EnumType.STRING) 
	private Parecer parecer;
	
	@Temporal(TemporalType.DATE)
	private Date dataReuniao;
	
	@Temporal(TemporalType.DATE)
	private Date dataResposta;
	
	@ManyToOne(cascade={CascadeType.MERGE,CascadeType.PERSIST, CascadeType.REFRESH})
	@JoinColumn(name="pendencia_fk") 
	private Pendencia pendencia;
	
	public StatusProjeto() {
		// TODO Auto-generated constructor stub
	}

	@XmlElement
	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

	@XmlElement
	public Parecer getParecer() {
		return parecer;
	}

	public void setParecer(Parecer parecer) {
		this.parecer = parecer;
	}

	public Date getDataReuniao() {
		return dataReuniao;
	}

	public void setDataReuniao(Date dataReuniao) {
		this.dataReuniao = dataReuniao;
	}

	@XmlElement
	public Date getDataResposta() {
		return dataResposta;
	}

	public void setDataResposta(Date dataResposta) {
		this.dataResposta = dataResposta;
	}

	@XmlElement
	public Pendencia getPendencia() {
		return pendencia;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setPendencia(Pendencia pendencia) {
		this.pendencia = pendencia;
	}

	@XmlAttribute
	public int getId() {
		return id;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dataResposta == null) ? 0 : dataResposta.hashCode());
		result = prime * result
				+ ((dataReuniao == null) ? 0 : dataReuniao.hashCode());
		result = prime * result + id;
		result = prime * result + ((parecer == null) ? 0 : parecer.hashCode());
		result = prime * result
				+ ((pendencia == null) ? 0 : pendencia.hashCode());
		result = prime * result + ((projeto == null) ? 0 : projeto.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		StatusProjeto other = (StatusProjeto) obj;
		if (dataResposta == null) {
			if (other.dataResposta != null)
				return false;
		} else if (!dataResposta.equals(other.dataResposta))
			return false;
		if (dataReuniao == null) {
			if (other.dataReuniao != null)
				return false;
		} else if (!dataReuniao.equals(other.dataReuniao))
			return false;
		if (id != other.id)
			return false;
		if (parecer == null) {
			if (other.parecer != null)
				return false;
		} else if (!parecer.equals(other.parecer))
			return false;
		if (pendencia == null) {
			if (other.pendencia != null)
				return false;
		} else if (!pendencia.equals(other.pendencia))
			return false;
		if (projeto == null) {
			if (other.projeto != null)
				return false;
		} else if (!projeto.equals(other.projeto))
			return false;
		return true;
	}
	
	

}
